const baseDao = require("./BaseDao");

const table = "dormAdmins";

/**
 * 根据用户名和密码查询
 * @param account
 * @param password
 * @returns {Promise<*>}
 */
function login(account, password) {
    return baseDao.findOne(table, `where account = '${account}' and password = '${password}'`)
}

/**
 * 分页查询书本
 * @param where 查询条件对象
 */
function findByPage(where = "") {
    //select a.*, b.cname dormName from dormAdmins a join dorms b on a.dormId = b.id ${where}
    return baseDao.findByPage(`dormAdmins a join dorms b on a.dormId = b.id`, where, "a.*, b.cname dormName");
}

/**
 * 自定义条件查询多条记录
 * @param where
 * @returns {Promise<*>}
 */
function findUsernameByDormId(where) {
    return baseDao.findBy(table, where, "id, username, dormId");
}

/**
 * 根据id搜索
 * @param id
 * @returns {Promise<*>}
 */
function findById(id) {
    return baseDao.findById(id, table);
}

/**
 * 查询数据总数
 * @param where
 * @returns {Promise<*>}
 */
function getCount(where = "") {
    return baseDao.getCount(table, where);
}

/**
 * 根据id删除数据
 * @param id
 * @returns {Promise<*>}
 */
function deleteById(id) {
    return baseDao.deleteById(table, id);
}

/**
 * 删除多个ids的数据
 * @param ids
 * @returns {Promise<*>}
 */
function deleteByIds(ids) {
    return baseDao.deleteByIds(table, ids);
}

/**
 * 插入数据到数据库中
 * @param obj
 * @returns {Promise<*>}
 */
function insert(obj) {
    return baseDao.insert(table, obj);
}

/**
 * 编辑
 * @param obj
 * @returns {Promise<*>}
 */
function update(obj) {
    return baseDao.update(table, obj);
}

/**
 * 根据username更新dormId
 * @param dormId
 * @param usernames
 * @returns {Promise<unknown>}
 */
function updateDormIdByUsernames(dormId, usernames) {
    if (!Array.isArray(usernames)) {
        throw new Error("usernames 必须是一个数组");
    }
    let where = "where username in (";
    usernames.forEach(item => {
        where += `'${item}',`;
    });
    where = where.substring(0, where.lastIndexOf(","));
    where += ")";
    return baseDao.updateBy(table, `  dormId = ${dormId} `, where)
}

module.exports = {
    findByPage, findById, getCount, deleteById, deleteByIds, insert, update, login, findUsernameByDormId, updateDormIdByUsernames
}